/*
 * Copyright (c) 2020 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef JS_NATIVEAPI_TIMER_TASK_H
#define JS_NATIVEAPI_TIMER_TASK_H

#include <stdbool.h>

#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* __cplusplus */

typedef void *timerHandle_t;

int InitTimerTask();

/** 创建并启动定时器任务，支持周期执行任务和单次超时任务两种
 *
 * @param isPeriodic        指定定时器任务类型是周期执行还是单次超时执行
 * @param delay             周期执行任务的执行周期或者定时任务的器超时时间，单位ms
 * @param userCallback      定时器任务回调函数指针，原型满足`void (*)(union sigval)`
 * @param userContext       定时器任务的上下文指针
 * @param timerHandle       定时器句柄，创建并启动任务成功，则保存的是定时器句柄
 *
 * @return EC_SUCCESS       启动定时任务成功
 * @return EC_INVALID       参数非法
 * @return EC_NORESOURCE    定时器创建失败
 * @return EC_FAILURE       启动定时器失败
*/
int StartTimerTask(bool isPeriodic, const unsigned int delay, void* userCallback,
                   void* userContext, timerHandle_t* timerHandle);

/** 停止并删除由StartTimerTask创建的定时器，调用该函数后，定时器句柄失效
 *
 * @param timerHandle       定时器句柄
 *
 * @return EC_SUCCESS       启动定时任务成功
 * @return 其他值，表示操作失败
*/
int StopTimerTask(const timerHandle_t timerHandle);

#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif  /* __cplusplus */

#endif /* JS_NATIVEAPI_TIMER_TASK_H */
